"""
SQLAlchemy 数据库模型

定义 User 表结构
"""

from sqlalchemy import Boolean, Column, Integer, String, DateTime
from sqlalchemy.sql import func
from datetime import datetime
import sys
from pathlib import Path

# 处理导入路径
if __name__ == "__main__" or "." not in __name__:
    sys.path.insert(0, str(Path(__file__).parent.parent.parent))
    from stage2_advanced.chapter02_jwt.database import Base
else:
    from .database import Base


class User(Base):
    """
    用户模型
    
    字段：
        id: 用户 ID（主键）
        username: 用户名（唯一）
        email: 邮箱（唯一）
        hashed_password: 加密后的密码
        full_name: 全名
        is_active: 是否激活
        is_superuser: 是否为超级用户（管理员）
        created_at: 创建时间
        updated_at: 更新时间
    """
    
    __tablename__ = "users"
    
    # 主键
    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    
    # 基本信息
    username = Column(String(50), unique=True, index=True, nullable=False)
    email = Column(String(100), unique=True, index=True, nullable=False)
    hashed_password = Column(String(255), nullable=False)
    full_name = Column(String(100), nullable=True)
    
    # 状态标志
    is_active = Column(Boolean, default=True, nullable=False)
    is_superuser = Column(Boolean, default=False, nullable=False)
    
    # 时间戳
    created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
    updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)
    
    def __repr__(self):
        return f"<User(id={self.id}, username='{self.username}', email='{self.email}')>"


